﻿using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using memo;

namespace memoTest
{
    /// <summary>
    /// Az AudioFile osztály unit tesztje.
    /// </summary>
    [TestClass]
    public class AudioFileTest
    {
        /// <summary>
        /// Empty Constructor to speed up compilation.
        /// </summary>
        public AudioFileTest() { }

        #region Constructors tests.
        /// <summary>
        /// AudioFile objektum létrehozásának tesztelése MP3 audió inputtal.
        /// </summary>
        [TestMethod]
        public void MP3AudioTest()
        {
            string expectedFilePath = "audiotest/audio.mp3";
            AudioFile.AudioFormat expectedAudioFileFormat = AudioFile.AudioFormat.MP3;
            AudioFile testAudio = new AudioFile(expectedFilePath, expectedAudioFileFormat);
            Assert.AreEqual(expectedAudioFileFormat, testAudio.Format,
                string.Format("Az ellenőrzésnél a fájl formátuma nem egyezik a várt formátum: '{0}' helyett '{1}' szerepel.",
                expectedAudioFileFormat, testAudio.Format));
            Assert.AreEqual(expectedFilePath, testAudio.FilePath,
                string.Format("Az ellenőrzésnél a fájl elérési útvonala nem egyezik a várt formátum: '{0}' helyett '{1}' szerepel.",
                expectedFilePath, testAudio.FilePath));
        }

        /// <summary>
        /// AudioFile objektum létrehozásának tesztelése OGG audió inputtal.
        /// </summary>
        [TestMethod]
        public void OGGAudioTest()
        {
            string expectedFilePath = "audiotest/audio.ogg";
            AudioFile.AudioFormat expectedAudioFileFormat = AudioFile.AudioFormat.OGG;
            AudioFile testAudio = new AudioFile(expectedFilePath, expectedAudioFileFormat);
            Assert.AreEqual(expectedAudioFileFormat, testAudio.Format,
                string.Format("Az ellenőrzésnél a fájl formátuma nem egyezik a várt formátum: '{0}' helyett '{1}' szerepel.",
                expectedAudioFileFormat, testAudio.Format));
            Assert.AreEqual(expectedFilePath, testAudio.FilePath,
                string.Format("Az ellenőrzésnél a fájl elérési útvonala nem egyezik a várt formátum: '{0}' helyett '{1}' szerepel.",
                expectedFilePath, testAudio.FilePath));
        }

        /// <summary>
        /// AudioFile objektum létrehozásának tesztelése WAV audió inputtal.
        /// </summary>
        [TestMethod]
        public void WAVAudioTest()
        {
            string expectedFilePath = "audiotest/audio.wav";
            AudioFile.AudioFormat expectedAudioFileFormat = AudioFile.AudioFormat.WAV;
            AudioFile testAudio = new AudioFile(expectedFilePath, expectedAudioFileFormat);
            Assert.AreEqual(expectedAudioFileFormat, testAudio.Format,
                string.Format("Az ellenőrzésnél a fájl formátuma nem egyezik a várt formátum: '{0}' helyett '{1}' szerepel.",
                expectedAudioFileFormat, testAudio.Format));
            Assert.AreEqual(expectedFilePath, testAudio.FilePath,
                string.Format("Az ellenőrzésnél a fájl elérési útvonala nem egyezik a várt formátum: '{0}' helyett '{1}' szerepel.",
                expectedFilePath, testAudio.FilePath));
        }

        /// <summary>
        /// Az AudioFile konstruktorának tesztje, hogy üres elérési útvonalra megfelelő kivétel dobódik-e meg.
        /// </summary>
        [TestMethod]
        [ExpectedException(typeof(ArgumentNullException), "Nem az elvárt Exception dobódott meg a null paraméter hatására.")]
        public void AudioFileConstructorTestWithoutFilePath()
        {
            new AudioFile(default(string), default(AudioFile.AudioFormat));
        }
        #endregion
    }
}
